import client from "./internal/httpClient";
import { requestMonitor } from "../utils/requestMonitor";

// 防重复调用机制
let configCache: any = null;
let configPromise: Promise<any> | null = null;
let lastConfigCall = 0;
const CONFIG_CACHE_DURATION = 10 * 60 * 1000; // 10分钟
const MIN_CALL_INTERVAL = 3000; // 减少到3秒最小调用间隔

export function config() {
  // 记录请求监控
  requestMonitor.logConfigRequest('system/config API');
  
  const now = Date.now();
  
  console.log('📡 system.config() 被调用');
  console.log('- 当前时间:', now);
  console.log('- 上次调用时间:', lastConfigCall);
  console.log('- 时间间隔:', now - lastConfigCall, 'ms');
  console.log('- 最小间隔要求:', MIN_CALL_INTERVAL, 'ms');
  
  // 如果缓存仍然有效，直接返回缓存
  if (configCache && (now - lastConfigCall) < CONFIG_CACHE_DURATION) {
    console.log('✅ API层: 使用系统配置缓存');
    return Promise.resolve(configCache);
  }
  
  // 如果请求过于频繁，返回缓存或等待
  if ((now - lastConfigCall) < MIN_CALL_INTERVAL) {
    console.log('⏰ API层: 配置请求过于频繁，使用缓存或等待');
    if (configCache) {
      console.log('✅ 返回现有缓存');
      return Promise.resolve(configCache);
    }
    
    // 如果没有缓存，等待一段时间后重试
    console.log('⏰ 没有缓存，等待后重试');
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log('⏰ 等待结束，重新调用');
        config().then(resolve).catch(reject);
      }, MIN_CALL_INTERVAL - (now - lastConfigCall));
    });
  }
  
  // 如果已有进行中的请求，返回该请求
  if (configPromise) {
    console.log('🔄 API层: 等待进行中的配置请求');
    return configPromise;
  }
  
  console.log('🚀 API层: 发起新的系统配置请求');
  lastConfigCall = now;
  
  configPromise = client.get("/api/v1/system/config", {})
    .then((result: any) => {
      console.log('✅ 系统配置请求成功');
      configCache = result;
      configPromise = null;
      return result;
    })
    .catch((error: any) => {
      console.error('❌ 系统配置请求失败:', error);
      configPromise = null;
      
      // 如果有缓存，在错误时返回缓存
      if (configCache) {
        console.log('🔄 API层: 请求失败，使用缓存配置');
        return configCache;
      }
      
      // 如果没有缓存且错误是网络问题，提供默认配置
      console.error('💀 无缓存且请求失败，抛出错误');
      throw error;
    });
  
  return configPromise;
}

export function imageCaptcha() {
  return client.get("/api/v1/system/image-captcha", {});
}

// 清除配置缓存的函数
export function clearConfigCache() {
  console.log('🧹 API层: 清除配置缓存');
  configCache = null;
  configPromise = null;
  lastConfigCall = 0;
}
